const express = require('express');
const router = express.Router();
const multer = require('multer');
const path = require('path');
const fs = require('fs');

// 配置存储
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    const uploadPath = path.join(__dirname, '../uploads');
    // 确保上传目录存在
    if (!fs.existsSync(uploadPath)) {
      fs.mkdirSync(uploadPath, { recursive: true });
    }
    cb(null, uploadPath);
  },
  filename: (req, file, cb) => {
    // 创建唯一文件名
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    const ext = path.extname(file.originalname);
    cb(null, file.fieldname + '-' + uniqueSuffix + ext);
  }
});

// 文件类型过滤器
const fileFilter = (req, file, cb) => {
  // 只允许图片文件上传
  const allowedTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
  
  if (allowedTypes.includes(file.mimetype)) {
    cb(null, true);
  } else {
    cb(new Error('不支持的文件类型。只允许 jpeg, png, gif 和 webp 文件'), false);
  }
};

const upload = multer({ 
  storage: storage,
  fileFilter: fileFilter,
  limits: {
    fileSize: 5 * 1024 * 1024 // 5MB上传限制
  }
});

// 上传照片
router.post('/photo', upload.single('photo'), (req, res) => {
  try {
    if (!req.file) {
      return res.status(400).json({ error: '没有文件被上传' });
    }
    
    // 构建文件URL路径
    const fileUrl = `/api/uploads/${req.file.filename}`;
    
    res.json({
      success: true,
      fileUrl: fileUrl,
      filename: req.file.filename
    });
  } catch (err) {
    console.error('文件上传失败', err);
    res.status(500).json({ error: '文件上传失败', message: err.message });
  }
});

// 上传盖章图片
router.post('/stamp', upload.single('stamp'), (req, res) => {
  try {
    if (!req.file) {
      return res.status(400).json({ error: '没有文件被上传' });
    }
    
    // 构建文件URL路径
    const fileUrl = `/api/uploads/${req.file.filename}`;
    
    res.json({
      success: true,
      fileUrl: fileUrl,
      filename: req.file.filename
    });
  } catch (err) {
    console.error('盖章图片上传失败', err);
    res.status(500).json({ error: '盖章图片上传失败', message: err.message });
  }
});

// base64图片上传处理
router.post('/base64', (req, res) => {
  try {
    const { imageData, type } = req.body;
    
    if (!imageData || !imageData.startsWith('data:image/')) {
      return res.status(400).json({ error: '无效的图片数据' });
    }
    
    // 从base64提取图片数据
    const matches = imageData.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
    if (!matches || matches.length !== 3) {
      return res.status(400).json({ error: 'Invalid base64 image format' });
    }
    
    const imageBuffer = Buffer.from(matches[2], 'base64');
    const fileType = matches[1].split('/')[1];
    const fileName = `${type || 'image'}-${Date.now()}.${fileType}`;
    const filePath = path.join(__dirname, '../uploads', fileName);
    
    // 保存图片文件
    fs.writeFileSync(filePath, imageBuffer);
    
    // 构建文件URL路径
    const fileUrl = `/api/uploads/${fileName}`;
    
    res.json({
      success: true,
      fileUrl: fileUrl,
      filename: fileName
    });
  } catch (err) {
    console.error('Base64图片上传失败', err);
    res.status(500).json({ error: 'Base64图片上传失败', message: err.message });
  }
});

module.exports = router; 